11192. Групповое обращение

 

Групповым обращением строки называется следующая процедура: строка разбивается на равные по величине группы символов, после чего каждая группа обращается. Зная количество групп в строке, необходимо найти ее обращение.

 

Вход. Содержит не более 101 теста. Каждый тест содержит количество групп g (g < 10) в строке и саму строку. Строка содержит не более 100 символов, ее длина кратна g. Строка может содержать только буквы и цифры. Последняя строка содержит 0 и не обрабатывается.

 

Выход. Для каждой входной строки вывести ее групповое обращение.

 

Пример входа

3 ABCEHSHSH

5 FA0ETASINAHGRI0NATWON0QA0NARI0

0

 

Пример выхода

CBASHEHSH

ATE0AFGHANISTAN0IRAQ0NOW0IRAN0

 

 

РЕШЕНИЕ

обработка строк

 

Анализ алгоритма

Каждую входную строку s следует разбить на группы по strlen(s) / g символов. Далее обернуть каждую группу символов при помощи функции reverse.

 

Реализация алгоритма

Входную строку храним в символьном массиве s.

 

char s[101];

 

Читаем входные данные до тех пор, пока после g следует строка s. Если после g строки s нет, то gets(s) возвращает 0 и происходит выход из цикла while. Положим g равным количеству символов в группе.

 

  while(scanf("%d ",&g),gets(s))

  {

    g = strlen(s) / g;

 

В цикле обращаем каждую группу символов. Результирующую строку выводим на печать.

 

    for(i = 0; i < strlen(s); i += g) reverse(s+i,s+i+g);

    printf("%s\n",s);

  } 

 

Чтение входных данных можно было бы совершить, используя только функцию scanf.  В переменную g читается число групп, в строку s читается последовательность символов, пока не встретится символ перевода строки (‘\n’). Цикл продолжается пока g не равно 0.

 

  while(scanf("%d %[^\n]",&g,s),g)

  {

   . . .

  }